const jwt = require("jsonwebtoken");
const { token } = require("morgan");
const secret = "fanfan"; //加密和解密的钥匙
//创建JWT字符串
function createJWT(payload,maxAge=3600*1000*24*7) { 
//生成token
    let token = jwt.sign(payload, secret, {
        expiresIn: maxAge
    });
    return token;
}
//验证JWT字符串
function verify(token) { 
    const result = jwt.verify(token, secret); //传入token 解密token 看是不是之前保存的内容{ username: "张三", password: "123456" }
    return result; //result就是一个JSON对象
}
//调用JWT函数 生成一个token
// let token = createJWT({ username: "张三", password: "123456" });
// console.log(token); //第一个是头 第二个是保存的内容 第三个是签名
//一个完整的jwt令牌如下：eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1ODc1NDgyMTV9.BCwUy3jnUQ_E6TqCayc7rCHkx - vxxdagUwPOWqwYCFc

// let r = verify(token);
// console.log(r); //{username: '张三',password: '123456',iat: 1665412420,exp: 2270212420}

// publishToken函数 生成token 通过响应头发送token到客户端
module.exports.publishToken = (res, payload = {}, maxAge = 60 * 60 * 24) => {  //maxAge=一天
    // let token = createJWT({ username: "张三", password: "123456" }); //调用创建JWT函数生成token
    let token = createJWT(payload);
    res.header("authorization", token); //通过响应头发送token到客户端
    return token;
}

//验证token和Bearer模块
module.exports.verifyToken = (req) => { 
    let token = req.headers.authorization; //得到客户端传来的请求头里面的token字符串
    if (!token) { 
      return null;
    }
    //如果token存在
    //一般的格式是 Bearer token值
    //所以我们需要分割一下
  
    //分割之后获取的token是个数组
    //但是我们只需要jwt的值
    token = token.split(" ");
    //如果长度是1，说明没有带Bearer
    token = token.length === 1 ? token[0] : token[1];
  
    try {
      let result = verify(token);
      console.log("---------")
      console.log(result);
      console.log("---------")
      return result;
    } catch (err) { 
      console.log(err);
      return null;
    }
  }


